package com.lagou.module4hw.hw56.client;


import com.lagou.module4hw.hw56.parsepackage.ParsePack;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

/**
 * 客户端
 */
public class Client {

    //用户名字
    private static String name;

    public static void main(String[] args) {
        //获取用户姓名
        getUerName();
        //加载聊天界面
        menu();
        //连接服务器
        connectServer();
    }
    private static void getUerName() {
        Scanner sc = new Scanner(System.in);
        while(name == null || name.isBlank()){
            System.out.print("请输入你的名字: ");
            name = sc.nextLine();
        }
        System.out.println("\t\t\t你好 " + name);
    }

    //聊天界面
    public static void menu(){
        System.out.println("\t\t\t欢迎来到多人聊天室");
        System.out.println("\t\t\t在这里你可以和小伙伴一起聊天或者发送文件/视频/图片");
        System.out.println("\t\t\t如果要发送文件/视频/图片请使用以下格式,聊天直接在下面聊天框输入内容");
        System.out.println("\t\t\tfile:G:/LADOU/预科班/笔记/对象头Mark Word图.webp.jpg");
        System.out.println("--------------------------------------------");
    }

    private static void connectServer() {
        Socket socket;
        BufferedOutputStream bos = null;
        try {
            socket  = new Socket("127.0.0.1",8889);
            bos = new BufferedOutputStream(socket.getOutputStream());

            //发送客户的姓名给服务器
            bos.write(name.getBytes());
            bos.flush();

            //创建子线程接收服务器转发过来的消息
            new Thread(new ClientReceive(name,socket)).start();

            while(true){
                System.out.print(name + " --> : ");
                Scanner sc = new Scanner(System.in);
                String str = sc.nextLine();

                //判断是发送文件还是普通字符串
                if(str.startsWith("file:")) {
                    //发送文件
                    //得到文件头byte数组
                    byte[] headers = ParsePack.packFile(str);
                    //先发送文件头
                    bos.write(headers);
                    bos.flush();

                    //发送文件具体内容
                    String filename = str.substring(5);
                    BufferedInputStream bis =
                            new BufferedInputStream(new FileInputStream(filename));
                    //定义发送文件的数组
                    byte[] data = new byte[1024];
                    int res = 0;
                    //从bis中读取文件内容，放到data中
                    while ( (res = bis.read(data)) != -1){
                        //写入到bos中，发给服务器
                        bos.write(data,0,res);
                    }
                    bos.flush();
                    System.out.println("文件发送成功");

                }else{
                    //发送普通字符串
                    byte[] strBytes = ParsePack.pack(str);
                    //发送为服务器
                    bos.write(strBytes);
                    bos.flush();

                    //判断是否下线
                    if("bye".equalsIgnoreCase(str)){
                        System.out.println(name + "下线了");
                        break;
                    }
                }
            }
        } catch (IOException e) {
            //e.printStackTrace();
            System.out.println("服务器崩溃了");
        }finally {
            if(null != bos) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
